#ifndef COMMON_HEAD_H
#define COMMON_HEAD_H

#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h>
#include <string.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#include <sys/mman.h>
#include <sys/select.h>
#include <time.h>
#include <sys/wait.h>
#include <dirent.h>
#include <syslog.h>
#include <sys/shm.h>
#include <sys/ipc.h>
#include <signal.h>
#include <sys/time.h>
#include <pthread.h>
#include <arpa/inet.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <netdb.h>
#include <sys/epoll.h>
#include <sys/sendfile.h>
#include <error.h>
#include <errno.h>
#include <fcntl.h>
#include <ctype.h>
#include <mysql/mysql.h>
#include <crypt.h>
#include <openssl/err.h>
#include <openssl/evp.h>
#include <regex.h>

typedef struct data_state{
    char command[10]; //要执行的具体命令    
    char args[1024]; //存储命令的键值对
}data;

#define ARGS_CHECK(argc,expected) \
    do{ \
        if((argc) != (expected)){ \
            fprintf(stderr,"args num error:%d\n",(argc)); \
            exit(1); \
        } \
    }while(0)

#define ERROR_CHECK(ret,error_flag,msg) \
    do{ \
       if((ret) == (error_flag)){ \
          perror(msg); \
          exit(1); \
       } \
    }while(0)
#define THREAD_ERROR_CHECK(ret, msg) \
    do{ \
	    if(ret != 0){ \
	        fprintf(stderr, "%s:%s \n", msg,strerror(ret)); \
        } \
    }while(0)
#endif
